"use strict";

const Controller = require("egg").Controller;

class CodeController extends Controller {
    /**
     * 获取验证码
     */
    async create() {
        // 接收参数
        const { mobile } = this.ctx.request.body;
        // 手机号对应的验证码是否已经存在
        const codeObj = await this.service.code.findByMobile(mobile);
        // 已经存在该验证码
        if (codeObj) {
            // 校验还在 60 秒内（频繁获取）
            if (Date.now() - Date.parse(codeObj.create_time) <= 60000) {
                this.ctx.body = {
                    code: 403,
                    message: "不能频繁获取验证码",
                };
                return;
            }
            // 删除验证码
            await this.service.code.deleteByMobile(mobile);
        }
        // 非空校验，手机号格式校验
        // 生成验证码 0 ~ 1 = 0.32321321321321
        const code = String(Math.random()).substr(2, 6);
        // 保存到数据库
        const res = await this.service.code.add(mobile, code, new Date());
        // 判断是否插入成功
        if (res.affectedRows === 1) {
            this.ctx.body = {
                code: 201,
                message: "验证码生成成功",
            };
        }
    }
}

module.exports = CodeController;
